package com.atguigu.advice;

import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.AfterThrowing;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;

/**
 * @版本： V5.1.0
 * @版权： Copyright @ 2025 广东广昱信息科技有限公司版权所有
 * @作者： 广东广昱信息科技有限公司
 * @日期： 2025-06-16 22:12
 */
@Component
@Aspect
@Order(10) //指定一个优先级的值,值越小 优先级越高!越高的前置先执行,后置后执行
public class TxAdvice {

    @Before("com.atguigu.pointcut.MyPointCut.pc()")
    public void begin(JoinPoint joinPoint) {
        System.out.println("开启事务...");
    }

    @AfterReturning(value = "com.atguigu.pointcut.MyPointCut.pc()",returning = "result")
    public void commit(Object result) {
        System.out.println("提交事务...");
    }

    @AfterThrowing(value = "com.atguigu.pointcut.MyPointCut.pc()",throwing = "t")
    public void rollback(JoinPoint joinPoint, Throwable t) {
        System.out.println("回滚事务...");
    }
}
